﻿'######################################################################################################################################
'# CLASSE CINEPASSION:
'######################################################################################################################################
Imports System.Net
Imports System.IO
Imports System.drawing
Imports MediaPortal.GUI.Library
Imports MediaPortal.Dialogs
Imports System.Xml
Imports SMC.Gestion_XML

Public Class CinePassion
    Private _Parent As Plugin

    Private Structure STRUC_CinePassion
        Dim Titre As String
        Dim Annee As String
        Dim Image As String
        Dim Synopsis As Integer
    End Structure

    '######################################################################################################################################
    '# Constructeur
    '######################################################################################################################################
    Public Sub New(ByVal CLASS_Param1 As Plugin)
        _Parent = CLASS_Param1
    End Sub
    '######################################################################################################################################

    '######################################################################################################################################
    '# Constructeur
    '######################################################################################################################################
    Private Function HTTP_Requete(ByVal STR_URI As String)
        Dim OBJ_WebRequete As WebRequest
        Dim OBJ_WebReponse As WebResponse
        Dim OBJ_Steamreader As StreamReader

        OBJ_WebRequete = WebRequest.Create(STR_URI)
        OBJ_WebRequete.ContentType = "application/x-www-form-urlencoded"
        OBJ_WebRequete.Method = "POST"
        OBJ_WebRequete.Proxy = New WebProxy("http://132.147.56.55:80/")

        OBJ_WebReponse = OBJ_WebRequete.GetResponse
        OBJ_Steamreader = New StreamReader(OBJ_WebReponse.GetResponseStream)
        Return OBJ_Steamreader.ReadToEnd().Trim()
    End Function
    '######################################################################################################################################

    '######################################################################################################################################
    '# Telecharger Jaquette
    '######################################################################################################################################
    Private Sub HTTP_Telecharger(ByVal STR_PARAM1 As String, ByVal STR_PARAM2 As String)
        Dim OBJ_WEBCLIENT As New WebClient
        Dim DLG_PROGRESSION As GUIDialogProgress
        Dim OBJ_WEBREQUETE As HttpWebRequest
        Dim OBJ_WEBREPONSE As HttpWebResponse
        Dim INT_TAILLE As Integer
        Dim INT_PROGRESSION As Integer
        Dim STREAM_SOURCE As Stream
        Dim STREAM_DESTINATION As Stream
        Dim INT_ByteSize As Integer
        Dim BYT_byteBuffer As Byte()

        DLG_PROGRESSION = GUIWindowManager.GetWindow(GUIWindow.Window.WINDOW_DIALOG_PROGRESS)
        DLG_PROGRESSION.SetHeading("CINE-PASSION")
        DLG_PROGRESSION.SetLine(1, "TELECHARGEMENT")
        DLG_PROGRESSION.SetLine(2, "")
        DLG_PROGRESSION.SetLine(3, "")
        DLG_PROGRESSION.SetLine(4, "")
        DLG_PROGRESSION.StartModal(GUIWindowManager.ActiveWindow)
        DLG_PROGRESSION.SetPercentage(0)
        DLG_PROGRESSION.Progress()
        DLG_PROGRESSION.ShowProgressBar(True)

        OBJ_WEBCLIENT.Proxy = New WebProxy("http://132.147.56.55:80/")

        'On prend la taille du fichier
        OBJ_WEBREQUETE = HttpWebRequest.Create(STR_PARAM1)
        OBJ_WEBREPONSE = OBJ_WEBREQUETE.GetResponse
        OBJ_WEBREPONSE.Close()
        INT_TAILLE = OBJ_WEBREPONSE.ContentLength
        INT_PROGRESSION = 0
        STREAM_SOURCE = OBJ_WEBCLIENT.OpenRead(STR_PARAM1)
        STREAM_DESTINATION = New FileStream(STR_PARAM2, FileMode.Create, FileAccess.Write, FileShare.None)
        INT_ByteSize = 0
        ReDim BYT_byteBuffer(INT_TAILLE)
        INT_ByteSize = STREAM_SOURCE.Read(BYT_byteBuffer, 0, BYT_byteBuffer.Length)
        While INT_ByteSize > 0
            STREAM_DESTINATION.Write(BYT_byteBuffer, 0, INT_ByteSize)
            INT_PROGRESSION += INT_ByteSize
            DLG_PROGRESSION.SetPercentage((INT_PROGRESSION / BYT_byteBuffer.Length) * 100)
            DLG_PROGRESSION.Progress()
            INT_ByteSize = STREAM_SOURCE.Read(BYT_byteBuffer, 0, BYT_byteBuffer.Length)
        End While
        STREAM_DESTINATION.Close()
        STREAM_SOURCE.Close()

        DLG_PROGRESSION.Close()
    End Sub
    '######################################################################################################################################

    '######################################################################################################################################
    '# Reduire Image
    '######################################################################################################################################
    Private Sub Reduire_Image(ByVal STR_PARAM1 As String)
        Dim BMP_Image As New Bitmap(STR_PARAM1)
        Dim BMP_Reduite As Bitmap
        Dim INT_Hauteur As Integer
        Dim OBJ_Graphique As Graphics
        Dim BOOL_FichierCopie As Boolean
        Dim TIMER_Depart As Integer
        Dim TIMER_Declenche As Boolean

        INT_Hauteur = Math.Round(BMP_Image.Height * (600 / BMP_Image.Width))
        BMP_Reduite = New Bitmap(600, INT_Hauteur)

        OBJ_Graphique = Graphics.FromImage(BMP_Reduite)
        OBJ_Graphique.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
        OBJ_Graphique.DrawImage(BMP_Image, New Rectangle(0, 0, BMP_Reduite.Width, BMP_Reduite.Height), New Rectangle(0, 0, BMP_Image.Width, BMP_Image.Height), GraphicsUnit.Pixel)
        OBJ_Graphique.Dispose()

        BMP_Image.Dispose()
        TIMER_Depart = DateTime.Now.Second
        TIMER_Declenche = False
        While Not BOOL_FichierCopie
            If TIMER_Declenche = False And TIMER_Depart <> DateTime.Now.Second Then TIMER_Declenche = True
            If TIMER_Declenche = True Then
                If DateTime.Now.Second > TIMER_Depart Then
                    If (TIMER_Depart - 60) + DateTime.Now.Second > 10 Then BOOL_FichierCopie = True
                Else
                    If TIMER_Depart - DateTime.Now.Second > 10 Then BOOL_FichierCopie = True
                End If
            End If
            Try
                'BMP_Reduite.Save(STR_PARAM1, System.Drawing.Imaging.ImageFormat.Png)
                'BOOL_FichierCopie = True
            Catch
                BOOL_FichierCopie = False
            End Try
        End While
        BMP_Reduite.Dispose()
    End Sub
    '######################################################################################################################################

    '######################################################################################################################################
    '# Lance la recherche sur le fichier avec son chemin complet
    '######################################################################################################################################
    Public Sub Recherce(ByVal STR_PARAM1 As String)
        Dim XML_Resultat As New XmlDocument
        Dim XML_Noeud As XmlNodeList
        Dim XML_Valeur As XmlNodeList
        Dim STR_Recherche As String
        Dim STR_TITRE As String
        Dim i As Integer
        Dim j As Integer
        Dim Resultats() As STRUC_CinePassion
        Dim DLG_Films As GUIDialogMenu
        Dim DLG_Info As GUIDialogOK
        Dim XML_Contenu As STRUC_XML_smc

        ReDim Resultats(-1)
        STR_Recherche = Mid(STR_PARAM1, InStrRev(STR_PARAM1, "\") + 1)
        STR_Recherche = Left(STR_Recherche, InStrRev(STR_Recherche, ".") - 1)
        XML_Resultat.LoadXml(HTTP_Requete("http://passion-xbmc.org/scraper/API/1/Movie.Search/Title/fr/XML/9071d312c21c4b7d1c64a67bf36067c1/" + STR_Recherche))
        XML_Noeud = XML_Resultat.GetElementsByTagName("movie")

        If XML_Noeud.Count > 0 Then


            For i = 0 To XML_Noeud.Count - 1
                XML_Valeur = XML_Noeud(i).ChildNodes
                ReDim Preserve Resultats(UBound(Resultats) + 1)

                For j = 0 To XML_Valeur.Count - 1
                    Select Case XML_Valeur(j).Name
                        Case "title"
                            Resultats(UBound(Resultats)).Titre = XML_Valeur(j).InnerText

                        Case "year"
                            Resultats(UBound(Resultats)).Annee = XML_Valeur(j).InnerText
                        Case "images"
                            If XML_Valeur(j).FirstChild.Attributes("type").InnerText = "Poster" And XML_Valeur(j).FirstChild.Attributes("size").InnerText = "original" Then
                                Resultats(UBound(Resultats)).Image = XML_Valeur(j).FirstChild.Attributes("url").InnerText
                            End If
                        Case "plot"
                            Resultats(UBound(Resultats)).Synopsis = XML_Valeur(j).InnerText
                    End Select
                Next
            Next

            DLG_Films = GUIWindowManager.GetWindow(GUIWindow.Window.WINDOW_DIALOG_MENU)
            DLG_Films.ShowQuickNumbers = False
            DLG_Films.SetHeading("CHOISIR UN FILM:")

            For i = 0 To UBound(Resultats)
                STR_TITRE = Resultats(i).Titre
                If Resultats(i).Annee <> "" And Resultats(i).Annee <> "0" Then STR_TITRE = STR_TITRE & " (" & Resultats(i).Annee & ")"
                DLG_Films.Add(STR_TITRE)
            Next

            DLG_Films.DoModal(GUIWindowManager.ActiveWindow)

            If File.Exists(STR_PARAM1 & ".j.smc") Then File.Delete(STR_PARAM1 & ".j.smc")
            If Resultats(DLG_Films.SelectedLabel).Image <> "" Then HTTP_Telecharger(Resultats(DLG_Films.SelectedLabel).Image, STR_PARAM1 & ".j.smc")
            Reduire_Image(STR_PARAM1 & ".j.smc")
            GUITextureManager.Clear()

            XML_Contenu = _Parent.SMC_Gestion_XML.LireElements(STR_PARAM1 & ".smc")
            XML_Contenu.Synopsis = Resultats(DLG_Films.SelectedLabel).Synopsis
            _Parent.SMC_Gestion_XML.EcrireElements(STR_PARAM1 & ".smc", XML_Contenu)
            _Parent.SMC_Explorer.VideoElements(_Parent.SMC_Explorer.INT_Fichier_PositionAbsolue).Synopsis = XML_Contenu.Synopsis
            _Parent.SMC_Explorer.EXPLORER_Rafraichir()

        Else
            DLG_Info = CType(GUIWindowManager.GetWindow(CType(GUIWindow.Window.WINDOW_DIALOG_OK, Integer)), GUIDialogOK)
            DLG_Info.SetHeading("Recherche:")
            DLG_Info.SetLine(1, "Aucun résultat trouvé")
            DLG_Info.DoModal(GUIWindowManager.ActiveWindow)

        End If
    End Sub
    '######################################################################################################################################

End Class
